/**
 */
package nump2cs.impl;

import nump2cs.Accessibility;
import nump2cs.Attribute;
import nump2cs.AttributeArgument;
import nump2cs.AttributeTarget;
import nump2cs.AttributeTypeDeclaration;
import nump2cs.BaseMethodDeclaration;
import nump2cs.CSharpModel;
import nump2cs.ConstructorDeclaration;
import nump2cs.FieldDeclaration;
import nump2cs.MemberDeclaration;
import nump2cs.MethodDeclaration;
import nump2cs.NamedAttributeArgument;
import nump2cs.NamedElement;
import nump2cs.Namespace;
import nump2cs.Nump2csFactory;
import nump2cs.Nump2csPackage;
import nump2cs.PositionalAttributeArgument;
import nump2cs.PropertyDeclaration;
import nump2cs.TypeDeclaration;
import nump2cs.VariableDeclaration;
import org.eclipse.emf.ecore.EAttribute;
import org.eclipse.emf.ecore.EClass;
import org.eclipse.emf.ecore.EEnum;
import org.eclipse.emf.ecore.EPackage;
import org.eclipse.emf.ecore.EReference;
import org.eclipse.emf.ecore.impl.EPackageImpl;

/**
 * <!-- begin-user-doc -->
 * An implementation of the model <b>Package</b>.
 * <!-- end-user-doc -->
 * @generated
 */
public class Nump2csPackageImpl extends EPackageImpl implements Nump2csPackage {
	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass attributeEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass attributeArgumentEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass positionalAttributeArgumentEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass namedAttributeArgumentEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass namedElementEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass typeDeclarationEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass memberDeclarationEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass fieldDeclarationEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass propertyDeclarationEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass variableDeclarationEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass cSharpModelEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass attributeTypeDeclarationEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass baseMethodDeclarationEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass constructorDeclarationEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass methodDeclarationEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EClass namespaceEClass = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EEnum attributeTargetEEnum = null;

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private EEnum accessibilityEEnum = null;

	/**
	 * Creates an instance of the model <b>Package</b>, registered with
	 * {@link org.eclipse.emf.ecore.EPackage.Registry EPackage.Registry} by the package
	 * package URI value.
	 * <p>Note: the correct way to create the package is via the static
	 * factory method {@link #init init()}, which also performs
	 * initialization of the package, or returns the registered package,
	 * if one already exists.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see org.eclipse.emf.ecore.EPackage.Registry
	 * @see nump2cs.Nump2csPackage#eNS_URI
	 * @see #init()
	 * @generated
	 */
	private Nump2csPackageImpl() {
		super(eNS_URI, Nump2csFactory.eINSTANCE);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private static boolean isInited = false;

	/**
	 * Creates, registers, and initializes the <b>Package</b> for this model, and for any others upon which it depends.
	 * 
	 * <p>This method is used to initialize {@link Nump2csPackage#eINSTANCE} when that field is accessed.
	 * Clients should not invoke it directly. Instead, they should simply access that field to obtain the package.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @see #eNS_URI
	 * @see #createPackageContents()
	 * @see #initializePackageContents()
	 * @generated
	 */
	public static Nump2csPackage init() {
		if (isInited) return (Nump2csPackage)EPackage.Registry.INSTANCE.getEPackage(Nump2csPackage.eNS_URI);

		// Obtain or create and register package
		Nump2csPackageImpl theNump2csPackage = (Nump2csPackageImpl)(EPackage.Registry.INSTANCE.get(eNS_URI) instanceof Nump2csPackageImpl ? EPackage.Registry.INSTANCE.get(eNS_URI) : new Nump2csPackageImpl());

		isInited = true;

		// Create package meta-data objects
		theNump2csPackage.createPackageContents();

		// Initialize created meta-data
		theNump2csPackage.initializePackageContents();

		// Mark meta-data to indicate it can't be changed
		theNump2csPackage.freeze();

  
		// Update the registry and return the package
		EPackage.Registry.INSTANCE.put(Nump2csPackage.eNS_URI, theNump2csPackage);
		return theNump2csPackage;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getAttribute() {
		return attributeEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getAttribute_Arguments() {
		return (EReference)attributeEClass.getEStructuralFeatures().get(0);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getAttributeArgument() {
		return attributeArgumentEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getAttributeArgument_Value() {
		return (EAttribute)attributeArgumentEClass.getEStructuralFeatures().get(0);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getAttributeArgument_Type() {
		return (EAttribute)attributeArgumentEClass.getEStructuralFeatures().get(1);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getPositionalAttributeArgument() {
		return positionalAttributeArgumentEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getNamedAttributeArgument() {
		return namedAttributeArgumentEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getNamedElement() {
		return namedElementEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getNamedElement_Name() {
		return (EAttribute)namedElementEClass.getEStructuralFeatures().get(0);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getTypeDeclaration() {
		return typeDeclarationEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getTypeDeclaration_BaseList() {
		return (EReference)typeDeclarationEClass.getEStructuralFeatures().get(0);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getTypeDeclaration_Members() {
		return (EReference)typeDeclarationEClass.getEStructuralFeatures().get(1);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getMemberDeclaration() {
		return memberDeclarationEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getMemberDeclaration_Modifier() {
		return (EAttribute)memberDeclarationEClass.getEStructuralFeatures().get(0);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getMemberDeclaration_Attributes() {
		return (EReference)memberDeclarationEClass.getEStructuralFeatures().get(1);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getFieldDeclaration() {
		return fieldDeclarationEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getFieldDeclaration_Declaration() {
		return (EReference)fieldDeclarationEClass.getEStructuralFeatures().get(0);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getPropertyDeclaration() {
		return propertyDeclarationEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getPropertyDeclaration_Type() {
		return (EAttribute)propertyDeclarationEClass.getEStructuralFeatures().get(0);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getVariableDeclaration() {
		return variableDeclarationEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getVariableDeclaration_Type() {
		return (EAttribute)variableDeclarationEClass.getEStructuralFeatures().get(0);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getCSharpModel() {
		return cSharpModelEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getCSharpModel_Attributes() {
		return (EReference)cSharpModelEClass.getEStructuralFeatures().get(0);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getCSharpModel_Types() {
		return (EReference)cSharpModelEClass.getEStructuralFeatures().get(1);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getCSharpModel_Namespaces() {
		return (EReference)cSharpModelEClass.getEStructuralFeatures().get(2);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getAttributeTypeDeclaration() {
		return attributeTypeDeclarationEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getAttributeTypeDeclaration_AllowMultiple() {
		return (EAttribute)attributeTypeDeclarationEClass.getEStructuralFeatures().get(0);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getAttributeTypeDeclaration_Inherited() {
		return (EAttribute)attributeTypeDeclarationEClass.getEStructuralFeatures().get(1);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getAttributeTypeDeclaration_Target() {
		return (EAttribute)attributeTypeDeclarationEClass.getEStructuralFeatures().get(2);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getBaseMethodDeclaration() {
		return baseMethodDeclarationEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getBaseMethodDeclaration_Parameters() {
		return (EReference)baseMethodDeclarationEClass.getEStructuralFeatures().get(0);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getConstructorDeclaration() {
		return constructorDeclarationEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getMethodDeclaration() {
		return methodDeclarationEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EAttribute getMethodDeclaration_ReturnType() {
		return (EAttribute)methodDeclarationEClass.getEStructuralFeatures().get(0);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EClass getNamespace() {
		return namespaceEClass;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EReference getNamespace_Types() {
		return (EReference)namespaceEClass.getEStructuralFeatures().get(0);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EEnum getAttributeTarget() {
		return attributeTargetEEnum;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public EEnum getAccessibility() {
		return accessibilityEEnum;
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public Nump2csFactory getNump2csFactory() {
		return (Nump2csFactory)getEFactoryInstance();
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private boolean isCreated = false;

	/**
	 * Creates the meta-model objects for the package.  This method is
	 * guarded to have no affect on any invocation but its first.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void createPackageContents() {
		if (isCreated) return;
		isCreated = true;

		// Create classes and their features
		attributeEClass = createEClass(ATTRIBUTE);
		createEReference(attributeEClass, ATTRIBUTE__ARGUMENTS);

		attributeArgumentEClass = createEClass(ATTRIBUTE_ARGUMENT);
		createEAttribute(attributeArgumentEClass, ATTRIBUTE_ARGUMENT__VALUE);
		createEAttribute(attributeArgumentEClass, ATTRIBUTE_ARGUMENT__TYPE);

		positionalAttributeArgumentEClass = createEClass(POSITIONAL_ATTRIBUTE_ARGUMENT);

		namedAttributeArgumentEClass = createEClass(NAMED_ATTRIBUTE_ARGUMENT);

		namedElementEClass = createEClass(NAMED_ELEMENT);
		createEAttribute(namedElementEClass, NAMED_ELEMENT__NAME);

		typeDeclarationEClass = createEClass(TYPE_DECLARATION);
		createEReference(typeDeclarationEClass, TYPE_DECLARATION__BASE_LIST);
		createEReference(typeDeclarationEClass, TYPE_DECLARATION__MEMBERS);

		memberDeclarationEClass = createEClass(MEMBER_DECLARATION);
		createEAttribute(memberDeclarationEClass, MEMBER_DECLARATION__MODIFIER);
		createEReference(memberDeclarationEClass, MEMBER_DECLARATION__ATTRIBUTES);

		fieldDeclarationEClass = createEClass(FIELD_DECLARATION);
		createEReference(fieldDeclarationEClass, FIELD_DECLARATION__DECLARATION);

		propertyDeclarationEClass = createEClass(PROPERTY_DECLARATION);
		createEAttribute(propertyDeclarationEClass, PROPERTY_DECLARATION__TYPE);

		variableDeclarationEClass = createEClass(VARIABLE_DECLARATION);
		createEAttribute(variableDeclarationEClass, VARIABLE_DECLARATION__TYPE);

		cSharpModelEClass = createEClass(CSHARP_MODEL);
		createEReference(cSharpModelEClass, CSHARP_MODEL__ATTRIBUTES);
		createEReference(cSharpModelEClass, CSHARP_MODEL__TYPES);
		createEReference(cSharpModelEClass, CSHARP_MODEL__NAMESPACES);

		attributeTypeDeclarationEClass = createEClass(ATTRIBUTE_TYPE_DECLARATION);
		createEAttribute(attributeTypeDeclarationEClass, ATTRIBUTE_TYPE_DECLARATION__ALLOW_MULTIPLE);
		createEAttribute(attributeTypeDeclarationEClass, ATTRIBUTE_TYPE_DECLARATION__INHERITED);
		createEAttribute(attributeTypeDeclarationEClass, ATTRIBUTE_TYPE_DECLARATION__TARGET);

		baseMethodDeclarationEClass = createEClass(BASE_METHOD_DECLARATION);
		createEReference(baseMethodDeclarationEClass, BASE_METHOD_DECLARATION__PARAMETERS);

		constructorDeclarationEClass = createEClass(CONSTRUCTOR_DECLARATION);

		methodDeclarationEClass = createEClass(METHOD_DECLARATION);
		createEAttribute(methodDeclarationEClass, METHOD_DECLARATION__RETURN_TYPE);

		namespaceEClass = createEClass(NAMESPACE);
		createEReference(namespaceEClass, NAMESPACE__TYPES);

		// Create enums
		attributeTargetEEnum = createEEnum(ATTRIBUTE_TARGET);
		accessibilityEEnum = createEEnum(ACCESSIBILITY);
	}

	/**
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	private boolean isInitialized = false;

	/**
	 * Complete the initialization of the package and its meta-model.  This
	 * method is guarded to have no affect on any invocation but its first.
	 * <!-- begin-user-doc -->
	 * <!-- end-user-doc -->
	 * @generated
	 */
	public void initializePackageContents() {
		if (isInitialized) return;
		isInitialized = true;

		// Initialize package
		setName(eNAME);
		setNsPrefix(eNS_PREFIX);
		setNsURI(eNS_URI);

		// Create type parameters

		// Set bounds for type parameters

		// Add supertypes to classes
		attributeEClass.getESuperTypes().add(this.getNamedElement());
		positionalAttributeArgumentEClass.getESuperTypes().add(this.getAttributeArgument());
		namedAttributeArgumentEClass.getESuperTypes().add(this.getAttributeArgument());
		namedAttributeArgumentEClass.getESuperTypes().add(this.getNamedElement());
		typeDeclarationEClass.getESuperTypes().add(this.getMemberDeclaration());
		memberDeclarationEClass.getESuperTypes().add(this.getNamedElement());
		fieldDeclarationEClass.getESuperTypes().add(this.getMemberDeclaration());
		propertyDeclarationEClass.getESuperTypes().add(this.getMemberDeclaration());
		propertyDeclarationEClass.getESuperTypes().add(this.getNamedElement());
		variableDeclarationEClass.getESuperTypes().add(this.getNamedElement());
		attributeTypeDeclarationEClass.getESuperTypes().add(this.getTypeDeclaration());
		baseMethodDeclarationEClass.getESuperTypes().add(this.getMemberDeclaration());
		constructorDeclarationEClass.getESuperTypes().add(this.getBaseMethodDeclaration());
		methodDeclarationEClass.getESuperTypes().add(this.getBaseMethodDeclaration());
		namespaceEClass.getESuperTypes().add(this.getMemberDeclaration());
		namespaceEClass.getESuperTypes().add(this.getNamedElement());

		// Initialize classes, features, and operations; add parameters
		initEClass(attributeEClass, Attribute.class, "Attribute", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEReference(getAttribute_Arguments(), this.getAttributeArgument(), null, "arguments", null, 0, -1, Attribute.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

		initEClass(attributeArgumentEClass, AttributeArgument.class, "AttributeArgument", IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEAttribute(getAttributeArgument_Value(), ecorePackage.getEString(), "value", null, 0, 1, AttributeArgument.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEAttribute(getAttributeArgument_Type(), ecorePackage.getEString(), "type", null, 0, 1, AttributeArgument.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

		initEClass(positionalAttributeArgumentEClass, PositionalAttributeArgument.class, "PositionalAttributeArgument", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);

		initEClass(namedAttributeArgumentEClass, NamedAttributeArgument.class, "NamedAttributeArgument", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);

		initEClass(namedElementEClass, NamedElement.class, "NamedElement", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEAttribute(getNamedElement_Name(), ecorePackage.getEString(), "name", null, 0, 1, NamedElement.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

		initEClass(typeDeclarationEClass, TypeDeclaration.class, "TypeDeclaration", IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEReference(getTypeDeclaration_BaseList(), this.getTypeDeclaration(), null, "baseList", null, 0, -1, TypeDeclaration.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEReference(getTypeDeclaration_Members(), this.getMemberDeclaration(), null, "members", null, 0, -1, TypeDeclaration.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

		initEClass(memberDeclarationEClass, MemberDeclaration.class, "MemberDeclaration", IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEAttribute(getMemberDeclaration_Modifier(), this.getAccessibility(), "modifier", null, 0, -1, MemberDeclaration.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEReference(getMemberDeclaration_Attributes(), this.getAttribute(), null, "attributes", null, 0, -1, MemberDeclaration.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

		initEClass(fieldDeclarationEClass, FieldDeclaration.class, "FieldDeclaration", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEReference(getFieldDeclaration_Declaration(), this.getVariableDeclaration(), null, "declaration", null, 0, 1, FieldDeclaration.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

		initEClass(propertyDeclarationEClass, PropertyDeclaration.class, "PropertyDeclaration", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEAttribute(getPropertyDeclaration_Type(), ecorePackage.getEString(), "type", null, 0, 1, PropertyDeclaration.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

		initEClass(variableDeclarationEClass, VariableDeclaration.class, "VariableDeclaration", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEAttribute(getVariableDeclaration_Type(), ecorePackage.getEString(), "type", null, 0, 1, VariableDeclaration.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

		initEClass(cSharpModelEClass, CSharpModel.class, "CSharpModel", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEReference(getCSharpModel_Attributes(), this.getAttribute(), null, "attributes", null, 0, -1, CSharpModel.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEReference(getCSharpModel_Types(), this.getTypeDeclaration(), null, "types", null, 1, -1, CSharpModel.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEReference(getCSharpModel_Namespaces(), this.getNamespace(), null, "namespaces", null, 0, -1, CSharpModel.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

		initEClass(attributeTypeDeclarationEClass, AttributeTypeDeclaration.class, "AttributeTypeDeclaration", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEAttribute(getAttributeTypeDeclaration_AllowMultiple(), ecorePackage.getEBoolean(), "allowMultiple", "false", 0, 1, AttributeTypeDeclaration.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEAttribute(getAttributeTypeDeclaration_Inherited(), ecorePackage.getEBoolean(), "Inherited", "false", 0, 1, AttributeTypeDeclaration.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
		initEAttribute(getAttributeTypeDeclaration_Target(), this.getAttributeTarget(), "target", null, 0, -1, AttributeTypeDeclaration.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

		initEClass(baseMethodDeclarationEClass, BaseMethodDeclaration.class, "BaseMethodDeclaration", IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEReference(getBaseMethodDeclaration_Parameters(), this.getVariableDeclaration(), null, "parameters", null, 0, -1, BaseMethodDeclaration.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

		initEClass(constructorDeclarationEClass, ConstructorDeclaration.class, "ConstructorDeclaration", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);

		initEClass(methodDeclarationEClass, MethodDeclaration.class, "MethodDeclaration", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEAttribute(getMethodDeclaration_ReturnType(), ecorePackage.getEString(), "returnType", null, 0, 1, MethodDeclaration.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

		initEClass(namespaceEClass, Namespace.class, "Namespace", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
		initEReference(getNamespace_Types(), this.getTypeDeclaration(), null, "types", null, 0, -1, Namespace.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);

		// Initialize enums and add enum literals
		initEEnum(attributeTargetEEnum, AttributeTarget.class, "AttributeTarget");
		addEEnumLiteral(attributeTargetEEnum, AttributeTarget.FIELD);
		addEEnumLiteral(attributeTargetEEnum, AttributeTarget.EVENT);
		addEEnumLiteral(attributeTargetEEnum, AttributeTarget.METHOD);
		addEEnumLiteral(attributeTargetEEnum, AttributeTarget.PARAM);
		addEEnumLiteral(attributeTargetEEnum, AttributeTarget.PROPERTY);
		addEEnumLiteral(attributeTargetEEnum, AttributeTarget.RETURN);
		addEEnumLiteral(attributeTargetEEnum, AttributeTarget.TYPE);

		initEEnum(accessibilityEEnum, Accessibility.class, "Accessibility");
		addEEnumLiteral(accessibilityEEnum, Accessibility.INTERNAL);
		addEEnumLiteral(accessibilityEEnum, Accessibility.PRIVATE);
		addEEnumLiteral(accessibilityEEnum, Accessibility.PROTECTED);
		addEEnumLiteral(accessibilityEEnum, Accessibility.PUBLIC);
		addEEnumLiteral(accessibilityEEnum, Accessibility.SEALED);
		addEEnumLiteral(accessibilityEEnum, Accessibility.ABSTRACT);
		addEEnumLiteral(accessibilityEEnum, Accessibility.STATIC);
		addEEnumLiteral(accessibilityEEnum, Accessibility.NEW);
		addEEnumLiteral(accessibilityEEnum, Accessibility.OVERRIDE);
		addEEnumLiteral(accessibilityEEnum, Accessibility.READONLY);
		addEEnumLiteral(accessibilityEEnum, Accessibility.VOLATILE);
		addEEnumLiteral(accessibilityEEnum, Accessibility.UNSAFE);
		addEEnumLiteral(accessibilityEEnum, Accessibility.ASYNC);
		addEEnumLiteral(accessibilityEEnum, Accessibility.PARTIAL);

		// Create resource
		createResource(eNS_URI);
	}

} //Nump2csPackageImpl
